package com.zret.oasys.service.impl;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import com.zret.oasys.dbtools.PageData;
import com.zret.oasys.entity.Attence;
import com.zret.oasys.entity.AttenceTable;
import com.zret.oasys.entity.Emp;
import com.zret.oasys.service.AttendanceService;
/**
 *考勤表业务层的实现类
 * @author 77404
 *
 */
public class AttendanceServiceImpl implements AttendanceService {
    /**
     * 考勤表增加业务层实现方法
     */
	@Override
	public boolean addAttendance(Attence attence) {
		boolean flag=false;
		//不为null才执行
		if (attence!=null) {
			//调用接口的声明的dao常量
			flag = attendanceDao.addAttendance(attence);
		}

		return flag;
	}
	
	/**
	 * 根据考勤类型查询所有业务层
	 */
	@Override
	public List<Attence> getAttendanceByType(String attencetype) {
		List<Attence> list=null;
		//不为null才执行
		if (attencetype!=null) {
			list = attendanceDao.getAttendanceByType(attencetype);
		}
			
		return list;
	}
	
	

	/**
	 * 根据员工编号、考勤日期（不含时间）、考勤类型的模糊查询
	 */
	@Override
	public List<Attence> getAttendanceByIdTypeTime(int empid, String attencetime, String attencetype) {
		List<Attence> list=null;
		//不为null在执行
		if (attencetime!=null&&attencetype!=null) {
		    list = attendanceDao.getAttendanceByIdTypeTime(empid, attencetime, attencetype);
		    
		}

		return list;
	}
	
	
	

	
	/**
	 * 根据员工id,日期考勤开始和结束时间和考勤类型来查询 (如可根据当前日期，查询不同时间段) [ ] 双闭合时间和半闭合( ] 
	 * 后续可扩展
	 * @param select 选择要执行的sql 比如1,2,3
	 * @param empid 员工id
	 * @param dateString 日期
	 * @param starttime 开始时间
	 * @param endtime  结束时间
	 * @param attencetype 考勤类型
	 * @return List<Attence>
	 */
	@Override
	public List<Attence> getAttendByIdStarEndTimeType(String select, int empid, String dateString, String starttime,
			String endtime, String attencetype) {
		List<Attence> list=null;
		//不为null在执行，调用dao
		if (select!=null&&dateString!=null&&starttime!=null&&endtime!=null&&attencetype!=null) {
			list = attendanceDao.getAttendByIdStarEndTimeType(select, empid, dateString, starttime, endtime, attencetype);
			
		}

		return list;
	}
	
	
	/**
	 * 联合查询，考勤表和员工表联合查询，查询员工信息（我主要目的是要获取员工id）
	 * @return  List<Emp>
	 */
	@Override
	public List<Emp> getAttendAndEmpIsEmpid() {
		//调用dao方法
		
		List<Emp> list = attendanceDao.getAttendAndEmpIsEmpid();
	
		return list;
		
	}
	
	
	
	
	/**
	 * 根据考勤日期获取考勤记录（分页）
	 * @param page 当前页
	 * @param pageSize  每页记录数
	 * @param attencetime 考勤日期
	 * @return   PageData<AttenceTable>   泛型：AttenceTable实体类是多表联合查询创建的实体类
	 */
	@Override
	public PageData<AttenceTable> getAttendanceByDatePage(int page, int pageSize, String attencetime) {
		//不为null才执行
		PageData<AttenceTable> attencetablePD=null;
		if (attencetime!=null) {
			//调用dao
			attencetablePD = attendanceDao.getAttendanceByDatePage(page, pageSize, attencetime);
		}
		
		
		return attencetablePD;
	}
	

	/**
	 * 根据流水号修改员工考勤状态
	 * @param serialnum 流水号(字符串，实现类在转换成long类型) 
	 * @param attencetype 考勤状态（到岗，迟到，请假，旷工）
	 * @return ture修改成功
	 */
	@Override
	public boolean updateAttendanceType(String serialnum, String attencetype) {
		boolean flag=false;
		//非空判断
		if (attencetype!=null&&serialnum!=null) {
			//解析流水号
			long serialnumLong = Long.parseLong(serialnum);
			flag = attendanceDao.updateAttendanceType(serialnumLong, attencetype);
		}

		return flag;
	}
	
	
	
	/**
	 * 根据员工id，考勤类型和考勤日期的模糊查询
	 * @param empid 员工id
	 * @param attenceDate 日期
	 * @param attencetype 考勤类型
	 * @return   List<Attence>
	 */
	
	@Override
	public List<Attence> getAttendanceByIdLikeTypeDate(int empid, String attenceDate, String attencetype) {
		List<Attence> list=null;
		//不为null才执行
		if (attenceDate!=null&&attencetype!=null) {
			//调用dao
			list = attendanceDao.getAttendanceByIdLikeTypeDate(empid, attenceDate, attencetype);
			
		}
		return list;
	}
	
	
	
	
	
	/**
	 * 根据员工编号模糊查询日期（分页）
	 * @param empid  员工编号
	 * @param attenceDate 考勤日期（只有日期）
	 * @return PageData<Attence>
	 */
	@Override
	public PageData<AttenceTable> getAttendanceByIdLikeDate(int page, int pageSize, int empid, String attenceDate) {
		PageData<AttenceTable> pd=null;
		if (attenceDate!=null) {
			 pd = attendanceDao.getAttendanceByIdLikeDate(page, pageSize, empid, attenceDate);
		}
		
		
		return pd;
	}
	
	
	
	
	
	
	
}
